<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/Python-3.6.2/Include/bytearrayobject.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/Python-3.6.2/Include/bytearrayobject.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="k">/* ByteArray object interface */</span>
<a name="2" /><span class="True">       2:</span> 
<a name="3" /><span class="True">       3:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="macros_noref.html#_UHlfQllURUFSUkFZT0JKRUNUX0hfMA__"><span class="b">Py_BYTEARRAYOBJECT_H</span></a>
<a name="4" /><span class="True">       4:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlfQllURUFSUkFZT0JKRUNUX0hfMA__"><span class="b">Py_BYTEARRAYOBJECT_H</span></a>
<a name="5" /><span class="False">       5:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="6" /><span class="False">       6:</span> <span class="m">extern</span> <span class="e">&quot;C&quot;</span> <span class="f">{</span>
<a name="7" /><span class="True">       7:</span> <span class="f">#</span><span class="n">endif</span>
<a name="8" /><span class="True">       8:</span> 
<a name="9" /><span class="True">       9:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">stdarg</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="10" /><span class="True">      10:</span> 
<a name="11" /><span class="True">      11:</span> <span class="k">/* Type PyByteArrayObject represents a mutable array of bytes.</span>
<a name="12" /><span class="True">      12:</span> <span class="k"> * The Python API is that of a sequence;</span>
<a name="13" /><span class="True">      13:</span> <span class="k"> * the bytes are mapped to ints in [0, 256).</span>
<a name="14" /><span class="True">      14:</span> <span class="k"> * Bytes are not characters; they may be used to encode characters.</span>
<a name="15" /><span class="True">      15:</span> <span class="k"> * The only way to go between bytes and str/unicode is via encoding</span>
<a name="16" /><span class="True">      16:</span> <span class="k"> * and decoding.</span>
<a name="17" /><span class="True">      17:</span> <span class="k"> * For the convenience of C programmers, the bytes type is considered</span>
<a name="18" /><span class="True">      18:</span> <span class="k"> * to contain a char pointer, not an unsigned char pointer.</span>
<a name="19" /><span class="True">      19:</span> <span class="k"> */</span>
<a name="20" /><span class="True">      20:</span> 
<a name="21" /><span class="True">      21:</span> <span class="k">/* Object layout */</span>
<a name="22" /><span class="True">      22:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="23" /><span class="True">      23:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="f">{</span>
<a name="24" /><span class="True">      24:</span>     <a href="macros_ref.html#_UHlPYmplY3RfVkFSX0hFQURfMA__"><span class="b">PyObject_VAR_HEAD</span></a>
<a name="25" /><span class="True">      25:</span>     <span class="b">Py_ssize_t</span> <span class="b">ob_alloc</span><span class="f">;</span> <span class="k">/* How many bytes allocated in ob_bytes */</span>
<a name="26" /><span class="True">      26:</span>     <span class="m">char</span> <span class="f">*</span><span class="b">ob_bytes</span><span class="f">;</span>      <span class="k">/* Physical backing buffer */</span>
<a name="27" /><span class="True">      27:</span>     <span class="m">char</span> <span class="f">*</span><span class="b">ob_start</span><span class="f">;</span>      <span class="k">/* Logical start inside ob_bytes */</span>
<a name="28" /><span class="True">      28:</span>     <span class="k">/* XXX(nnorwitz): should ob_exports be Py_ssize_t? */</span>
<a name="29" /><span class="True">      29:</span>     <span class="m">int</span> <span class="b">ob_exports</span><span class="f">;</span>      <span class="k">/* How many buffer exports */</span>
<a name="30" /><span class="True">      30:</span> <span class="f">}</span> <span class="b">PyByteArrayObject</span><span class="f">;</span>
<a name="31" /><span class="True">      31:</span> <span class="f">#</span><span class="n">endif</span>
<a name="32" /><span class="True">      32:</span> 
<a name="33" /><span class="True">      33:</span> <span class="k">/* Type object */</span>
<a name="34" /><span class="True">      34:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyByteArray_Type</span><span class="f">;</span>
<a name="35" /><span class="True">      35:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyByteArrayIter_Type</span><span class="f">;</span>
<a name="36" /><span class="True">      36:</span> 
<a name="37" /><span class="True">      37:</span> <span class="k">/* Type check macros */</span>
<a name="38" /><span class="True">      38:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlCeXRlQXJyYXlfQ2hlY2tfMA__"><span class="b">PyByteArray_Check</span></a><span class="f">(</span><span class="b">self</span><span class="f">)</span> <a href="macros_ref.html#_UHlPYmplY3RfVHlwZUNoZWNrXzA_"><span class="b">PyObject_TypeCheck</span></a><span class="f">(</span><span class="b">self</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">PyByteArray_Type</span><span class="f">)</span>
<a name="39" /><span class="True">      39:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlCeXRlQXJyYXlfQ2hlY2tFeGFjdF8w"><span class="b">PyByteArray_CheckExact</span></a><span class="f">(</span><span class="b">self</span><span class="f">)</span> <span class="f">(</span><a href="macros_ref.html#_UHlfVFlQRV8w"><span class="b">Py_TYPE</span></a><span class="f">(</span><span class="b">self</span><span class="f">)</span> <span class="f">==</span> <span class="f">&amp;</span><span class="b">PyByteArray_Type</span><span class="f">)</span>
<a name="40" /><span class="True">      40:</span> 
<a name="41" /><span class="True">      41:</span> <span class="k">/* Direct API functions */</span>
<a name="42" /><span class="True">      42:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyByteArray_FromObject</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="43" /><span class="True">      43:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyByteArray_Concat</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="44" /><span class="True">      44:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyByteArray_FromStringAndSize</span><span class="f">(</span><span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="b">Py_ssize_t</span><span class="f">)</span><span class="f">;</span>
<a name="45" /><span class="True">      45:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">Py_ssize_t</span><span class="f">)</span> <span class="b">PyByteArray_Size</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="46" /><span class="True">      46:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">char</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyByteArray_AsString</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="47" /><span class="True">      47:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyByteArray_Resize</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">Py_ssize_t</span><span class="f">)</span><span class="f">;</span>
<a name="48" /><span class="True">      48:</span> 
<a name="49" /><span class="True">      49:</span> <span class="k">/* Macros, trading safety for speed */</span>
<a name="50" /><span class="True">      50:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="51" /><span class="True">      51:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlCeXRlQXJyYXlfQVNfU1RSSU5HXzA_"><span class="b">PyByteArray_AS_STRING</span></a><span class="f">(</span><span class="b">self</span><span class="f">)</span> \
<a name="52" /><span class="True">      52:</span>     <span class="f">(</span><a href="macros_ref.html#_YXNzZXJ0XzA_"><span class="b">assert</span></a><span class="f">(</span><a href="macros_noref.html#_UHlCeXRlQXJyYXlfQ2hlY2tfMA__"><span class="b">PyByteArray_Check</span></a><span class="f">(</span><span class="b">self</span><span class="f">)</span><span class="f">)</span><span class="f">,</span> \
<a name="53" /><span class="True">      53:</span>      <a href="macros_ref.html#_UHlfU0laRV8w"><span class="b">Py_SIZE</span></a><span class="f">(</span><span class="b">self</span><span class="f">)</span> <span class="f">?</span> <span class="f">(</span><span class="f">(</span><span class="b">PyByteArrayObject</span> <span class="f">*</span><span class="f">)</span><span class="f">(</span><span class="b">self</span><span class="f">)</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">ob_start</span> <span class="f">:</span> <span class="b">_PyByteArray_empty_string</span><span class="f">)</span>
<a name="54" /><span class="True">      54:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlCeXRlQXJyYXlfR0VUX1NJWkVfMA__"><span class="b">PyByteArray_GET_SIZE</span></a><span class="f">(</span><span class="b">self</span><span class="f">)</span> <span class="f">(</span><a href="macros_ref.html#_YXNzZXJ0XzA_"><span class="b">assert</span></a><span class="f">(</span><a href="macros_noref.html#_UHlCeXRlQXJyYXlfQ2hlY2tfMA__"><span class="b">PyByteArray_Check</span></a><span class="f">(</span><span class="b">self</span><span class="f">)</span><span class="f">)</span><span class="f">,</span> <a href="macros_ref.html#_UHlfU0laRV8w"><span class="b">Py_SIZE</span></a><span class="f">(</span><span class="b">self</span><span class="f">)</span><span class="f">)</span>
<a name="55" /><span class="True">      55:</span> 
<a name="56" /><span class="True">      56:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="m">char</span><span class="f">)</span> <span class="b">_PyByteArray_empty_string</span><span class="f">[</span><span class="f">]</span><span class="f">;</span>
<a name="57" /><span class="True">      57:</span> <span class="f">#</span><span class="n">endif</span>
<a name="58" /><span class="True">      58:</span> 
<a name="59" /><span class="False">      59:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="60" /><span class="False">      60:</span> <span class="f">}</span>
<a name="61" /><span class="True">      61:</span> <span class="f">#</span><span class="n">endif</span>
<a name="62" /><span class="True">      62:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !Py_BYTEARRAYOBJECT_H */</span>
<a name="63" /><span class="True">      63:</span> </pre>
  </body>
</html>
